package dao;

import entity.AfterSaleApplication;
import enum_var.AfterSaleType;
import enum_var.ApplicationStatus;
import org.apache.ibatis.annotations.Param;
import java.util.List;

public interface AfterSaleApplicationMapper {

    /**
     * 根据ID查询售后申请
     * @param id 申请ID
     * @return 售后申请实体
     */
    AfterSaleApplication selectById(Long id);

    /**
     * 根据用户ID查询售后申请列表
     * @param userId 用户ID
     * @return 售后申请列表
     */
    List<AfterSaleApplication> selectByUserId(Long userId);

    /**
     * 根据状态查询售后申请列表
     * @param status 申请状态
     * @return 售后申请列表
     */
    List<AfterSaleApplication> selectByStatus(ApplicationStatus status);

    /**
     * 查询所有售后申请
     * @return 售后申请列表
     */
    List<AfterSaleApplication> selectAll();

    /**
     * 新增售后申请
     * @param application 售后申请实体
     */
    void insert(AfterSaleApplication application);

    /**
     * 更新售后申请
     * @param application 售后申请实体
     * @return 影响行数
     */
    int updateById(AfterSaleApplication application);

    /**
     * 删除售后申请
     * @param id 申请ID
     * @return 影响行数
     */
    int deleteById(Long id);

    List<AfterSaleApplication> selectByIdAndStatus(
            @Param("userId") Long userId,
            @Param("status") ApplicationStatus status);

    List<AfterSaleApplication> selectByIdAndType(
            @Param("userId") Long userId,
            @Param("type") AfterSaleType type);

    List<AfterSaleApplication> selectByIdStatusAndType(
            @Param("userId") Long userId,
            @Param("status") ApplicationStatus status,
            @Param("type") AfterSaleType type
    );

    List<AfterSaleApplication> selectByStatusAndType(ApplicationStatus status, AfterSaleType type);

    List<AfterSaleApplication> selectByType(AfterSaleType type);
}